namespace SharpTalk.Core.Services.Contracts.Server
{
    using System.Net.Security;
    using System.ServiceModel;
    using System;
    using Requests;
    using Responses;

    [ServiceContract(Namespace = "http://SharpTalk/", ProtectionLevel = ProtectionLevel.EncryptAndSign)]
    public interface IUserServices :
        IRequestServiceBase<
            UserCreateRequest, UserCreateResponse,
            UserFindRequest, UserFindResponse ,
            UserUpdateRequest, UserUpdateResponse,
            UserDeleteRequest, UserDeleteResponse>
    {
        [OperationContract(Name = "NotifyUserChange", Action = "NotifyUserChange", ReplyAction = "NotifyUserChangeResponse", AsyncPattern = true)]
        IAsyncResult BeginNotifyUserChange(UserNotifyChangedRequest request, AsyncCallback callback, object state);
        UserNotifyChangedResponse EndNotifyUserChange(IAsyncResult result);
    }
}